% <one line to give the program's name and a brief idea of what it does.> <project url>
% Copyright (C) <year>  xiaogaozi <gaochangjian@gmail.com>
% 
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
% 
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
% 
% You should have received a copy of the GNU General Public License
% along with this program.  If not, see <http://www.gnu.org/licenses/>.

\documentclass[adobefonts]{ctexart}

\CTEXoptions[captiondelimiter={\quad}]

\usepackage{amsmath}            % AMS的数学宏包
\usepackage{amssymb}            % AMS的数学符号宏包
\usepackage{graphicx}           % 插入图片需要的宏包
\usepackage{float}              % 强大的浮动环境控制宏包
\usepackage{framed}             % `shaded'环境需要用到
\usepackage{enumitem}           % 增强列表功能

\usepackage{shortvrb}           % 简化\verb的写法
\MakeShortVerb{\|}

\usepackage{color}              % 可以定义各种颜色
\usepackage[x11names]{xcolor}   % 下面的RoyalBlue3颜色需要用到的宏包
% 自定义的几种颜色
\definecolor{shadecolor}{gray}{0.85}
% \definecolor{darkblue}{rgb}{52,101,164}
% \definecolor{darkgreen}{rgb}{78,154,6}

% % 设置背景颜色
% \definecolor{bisque}{rgb}{.996,.891,.755}
% \pagecolor{bisque}

\usepackage[pdfauthor={田花, 杨进, 王坤浩, 高昌健},
            pdftitle={自动点餐系统},
            colorlinks=true,
            urlcolor=blue,
            linkcolor=RoyalBlue3]{hyperref} % 为超链接设置颜色, 修改PDF文件信息

\title{\textbf{自动点餐系统}}
\author{田花$\:$杨进$\:$王坤浩$\:$高昌健}

\usepackage[pagestyles]{titlesec} % 定制页眉页脚
% % 设置页眉页脚
% \newpagestyle{main}{%
%   \sethead[$\cdot$~\thepage~$\cdot$][][\thesection\quad%
%   \sectiontitle]{\thesection\quad\sectiontitle}{}{%
%   $\cdot$~\thepage~$\cdot$}
%   \setfoot{}{}{}\headrule}
% \pagestyle{main}
% \renewpagestyle{plain}{\sethead{}{}{}\setfoot{}{}{}}
\pagestyle{plain}

\usepackage[top=1in,bottom=1in,left=1.25in,right=1.25in]{geometry} % 设置页边距

\setlength{\belowcaptionskip}{1em} % 设置caption之后的距离

% XeTeX logo
\def\XeTeX{\leavevmode
\setbox0=\hbox{X\lower.5ex\hbox{\kern-.15em\reflectbox{E}}\kern-.1667em
\TeX}%
\dp0=0pt\ht0=0pt\box0}

% For LaN
\newcommand{\LaN}{L{\scriptsize\hspace{-0.47em}\raisebox{0.23em}{A}}\hspace{-0.1em}N}

\begin{document}

\maketitle

\section{系统概述}
自动点餐系统设计的初衷源于每次去食堂打菜的时候都是一群人在那围着看有哪些菜，这样不仅容易造成拥挤，还降低了效率。我们的系统就是让每次来打菜的人先在系统上选好菜，然后凭借单据直接到打菜那里拿就行了。

\section{一级用例图}
\begin{figure}[H]
  \centering
  \includegraphics[width=6.766666667in]{pic/use_case_level1.png}
\end{figure}

\section{一级用例文档}
\subsection{统计金额}
\begin{itemize}
  \item 名称：统计金额
  \item 描述：管理员通过系统得到固定时间段内的收入金额以及每一笔消费的详细情况
  \item 期望结果：管理员能详细了解每一笔消费的金额大小及时间，点餐所需金额与收入金额是否吻合，并在每日，每周，每月，每年分别进行一次统计。
  \item 用户目标：管理员希望借此系统方便、快捷、全面了解收入情况，会计希望能得到准确收入情况并核对收支账目。
  \item 参与者/角色：系统管理员，会计师，银行转帐系统管理员，点餐卡充值管理员。
  \item 依赖性：点餐用例，登录用例
  \item 前置条件：管理员正常登录系统，系统运行无异常，点餐消费者消费无异常。
  \item 方案：
        \begin{enumerate}
          \item 管理员正常登录，正确输入想要查询统计表的相关日期，并得到相关统计表。
          \item 管理员正常登录，浏览当日收入中的每一笔消费详细情况（与1不同的是并没有输
入查询日期）。
          \item 管理员正常登录，正确输入想要查询统计表的相关日期并修改某一笔收入信息，得
到修改后的统计表。
          \item 会计登录查询，得到相关统计表（不同于通过管理员登录查询得到）。
          \item 其它方案
        \end{enumerate}
  \item 工作流：
    \begin{enumerate}[label=\alph*)]
      \item 方案1
            \begin{enumerate}[label=\arabic*.]
              \item 管理员输入正确用户名与密码，系统经过验证，准许登录。
              \item 管理员输入想要查询的符合逻辑的日期，提交给系统。
              \item 系统根据管理员提供的日期，先进行判断，满足条件后调用远程数据库进行相关查询。
              \item 系统查询得到结果后返回给管理员
            \end{enumerate}

            意外：
            \begin{enumerate}[label=\arabic*.]
              \item 管理员未输入正确用户名与密码，登录失败。
              \item 管理员未输入符合逻辑的日期，系统提示失败。
              \item 系统调用远程数据库失败，系统没有得到相关统计表。
              \item 系统显示统计表失败，管理员没有得到相关统计表。
            \end{enumerate}
      \item 方案2
            \begin{enumerate}[label=\arabic*.]
              \item 管理员输入正确用户名与密码，系统经过验证，准许登录。
              \item 管理员点击当日收入中的其中一笔消费
              \item 系统根据管理员点击链接，先进行判断，满足条件后调用远程数据库进行相
关查询。
              \item 管理员得到系统返回的相关数据
            \end{enumerate}

            意外：
            \begin{enumerate}[label=\arabic*.]
              \item 管理员未输入正确用户名与密码，登录失败。
              \item 管理员点击时链接失败，系统无法处理。
              \item 系统调用远程数据库失败，系统没有得到相关数据。
              \item 系统显示该消费详细情况失败，管理员没有得到。
            \end{enumerate}
      \item 方案3
            \begin{enumerate}[label=\arabic*.]
              \item 管理员输入正确用户名与密码，系统经过验证，准许登录。
              \item 管理员输入想要查询的符合逻辑的日期，提交给系统。
              \item 系统根据管理员提供的日期，先进行判断，满足条件后调用远程数据库进行相关查询。
              \item 系统查询得到结果后返回给管理员
              \item 管理员得到表后，修改其中数据再提交给系统。
              \item 系统先判断该管理员是否有修改权限，满足条件进行修改保存，并提交给远程数据库。
              \item 远程数据库备份并更新后，返回修改后的统计表给系统。
              \item 管理员从系统中得到修改后的统计表
            \end{enumerate}

            意外：
            \begin{enumerate}[label=\arabic*.]
              \item 管理员未输入正确用户名与密码，登录失败。
              \item 管理员未输入符合逻辑的日期，系统提示失败。
              \item 系统调用远程数据库失败，系统没有得到相关统计表。
              \item 系统显示统计表失败，管理员没有得到相关统计表。
              \item 管理员得到表后，修改的数据不符合规定，系统不予处理。
              \item 管理员无修改权限，系统不予修改。
              \item 远程数据库更新失败，没有返回修改后的统计表给系统。
              \item 系统显示修改后的统计表失败，管理员没有得到相关统计表。
            \end{enumerate}
      \item 方案4
            \begin{enumerate}[label=\arabic*.]
              \item 会计输入正确用户名与密码，系统经过验证，准许登录。
              \item 会计输入想要查询的符合逻辑的日期，提交给系统。
              \item 系统根据会计提供的日期，先进行判断，满足条件后调用远程数据库进行相关查询。
              \item 系统查询得到结果后返回给会计
            \end{enumerate}

            意外：
            \begin{enumerate}[label=\arabic*.]
              \item 会计未输入正确用户名与密码，登录失败。
              \item 会计未输入符合逻辑的日期，系统提示失败。
              \item 系统调用远程数据库失败，系统没有得到相关统计表。
              \item 系统显示统计表失败，会计没有得到相关统计表。
            \end{enumerate}
    \end{enumerate}
  \item 后置条件：统计表的金额数据均为点餐消费结算后更新的数据
  \item 商业规则：
        \begin{enumerate}
          \item 每日消费结算为零点，每周消费结算为每周日零点，每月消费结算为月底零点，每年消费结算为年底零点。
          \item 统计表中所有日期记录均遵循国际标准
        \end{enumerate}
  \item 需求：保证从系统建立开始的所有消费记录都存在，所有原始数据都有所备份，所有修改痕迹都有记录。
\end{itemize}
\subsection{点餐}
\begin{itemize}
  \item 名称：点餐
  \item 描述：顾客选择想吃的餐点，确定以后系统打印出一张清单，并从顾客账户中扣除相应的费用。
  \item 期望结果：一张点餐清单
  \item 用户目标：获得点餐清单用于取得餐点
  \item 参与者/角色：顾客
  \item 依赖性：登录用例
  \item 前置条件：顾客需要拥有一张专用点餐卡，且余额充足。
  \item 方案：
        \begin{enumerate}
          \item 顾客正常登录，选择想吃的餐点，且账户上余额充足，点餐成功。
          \item 顾客正常登录，选择想吃的餐点，但余额不足，在顾客充值成功后，点餐成功。
          \item 其它方案
        \end{enumerate}
  \item 工作流：
    \begin{enumerate}[label=\alph*)]
      \item 方案1
            \begin{enumerate}[label=\arabic*.]
              \item 插入点餐卡，登录。
              \item 选择“点餐”菜单，再选择想吃的餐点。
              \item 确定点餐，并拿走点餐清单。
            \end{enumerate}

            意外：
            \begin{enumerate}[label=\arabic*.]
              \item 系统未响应
              \item 餐点列表读取失败
            \end{enumerate}
      \item 方案2
            \begin{enumerate}[label=\arabic*.]
              \item 插入点餐卡，登录。
              \item 选择“点餐”菜单，再选择想吃的餐点。
              \item 确定点餐，但提示卡上余额不足。
              \item 返回主菜单，选择“充值”。
              \item 充值成功后继续点餐，完成后拿走点餐清单。
            \end{enumerate}

            意外：
            \begin{enumerate}[label=\arabic*.]
              \item 系统未响应
              \item 餐点列表读取失败
            \end{enumerate}
    \end{enumerate}
  \item 后置条件：得到正确的点餐清单
  \item 需求：支持随机配菜
  \item 实现注意事项：要保证系统的响应速度
\end{itemize}
\subsection{充值}
\begin{itemize}
  \item 名称：充值
  \item 描述：向顾客的账户中充值
  \item 期望结果：让用户充值成功
  \item 用户目标：顾客通过充值而进行消费
  \item 参与者/角色：顾客
  \item 依赖性：登录用例
  \item 前置条件：余额不足或余额未达到最高上限
  \item 方案：
        \begin{enumerate}
          \item 登录成功，正确输入银行账户密码后充值成功。
          \item 登录成功，银行密码输入错误，顾客反复输入直至正确后充值成功。
          \item 其它方案
        \end{enumerate}
  \item 工作流：
        \begin{enumerate}
          \item 登录后进入个人中心
          \item 点击充值，输入充值金额。
          \item 输入银行账户密码
          \item 确定充值
        \end{enumerate}
  \item 后置条件：成功地记录顾客的充值数
  \item 实现注意事项：系统繁忙时可能充值失败而返回
\end{itemize}
\subsection{查询余额}
\begin{itemize}
  \item 名称：查询余额
  \item 描述：顾客查询卡上余额，以便进行必要充值和消费。
  \item 期望结果：余额数量信息
  \item 用户目标：顾客得知余额数量
  \item 参与者/角色：顾客
  \item 依赖性：登录用例
  \item 前置条件：顾客拥有一个账号
  \item 方案：
        \begin{enumerate}
          \item 登录点餐机成功，顾客要求查询余额，数据库成功响应请求并显示顾客余额信息。
          \item 登录点餐机成功，顾客要求查询余额，数据库繁忙导致请求失败，返回主菜单，顾客继续点击查询余额，直到数据库响应请求并显示顾客余额信息。
          \item 顾客登录失败，返回登录界面，直到登录成功并查询余额，系统显示顾客余额信息。
        \end{enumerate}
  \item 工作流：
        \begin{enumerate}
          \item 登录
          \item 发出查询余额请求
          \item 响应请求
          \item 得到余额信息
        \end{enumerate}
  \item 后置条件：成功地记录用户的充值数
  \item 实现注意事项：系统繁忙时可能查询失败而返回
\end{itemize}
\subsection{管理菜单}
\begin{itemize}
  \item 名称：管理菜单
  \item 描述：更新计算机中菜单的信息，对当前菜单情况、菜品被点次数情况进行统计分析，以全面掌握顾客口味的情况，加以改善以推出更受欢迎的菜色。
  \item 期望结果：菜单得以更新，得到报表清单。
  \item 用户目标：了解大众顾客口味情况，加以改善以推出更受欢迎的菜色，增加营收。
  \item 参与者/角色：管理员
  \item 依赖性：点餐用例，登录用例
  \item 前置条件：管理员正常登录系统
  \item 方案：
        \begin{enumerate}
          \item 管理员正常登录，查询数据库，统计当前菜单时令菜情况，根据季节性，推出时令菜。
          \item 管理员正常登录，浏览当日菜单被点餐情况，并给与记录，形成统计表。
          \item 管理员正常登录，查询数据库，统计当月菜品被点情况，对当前菜单进行添加/删除或移动等修改，增加新菜色，受欢迎菜色移动到推荐栏中，删除冷门菜品，并记录。
          \item 管理员正常登录，查询数据库，统计当前菜单情况，统计菜单被修改的菜品，并列出清单。
          \item 其它方案
        \end{enumerate}
  \item 工作流：
    \begin{enumerate}[label=\alph*)]
      \item 方案1
            \begin{enumerate}[label=\arabic*.]
              \item 管理员输入正确用户名与密码，系统经过验证，准许登录。
              \item 管理员输入相应查询条件，提交各系统。
              \item 系统根据条件，反馈数据，管理员进行查看是否有符合当前的时令菜，以及过时的时令菜。
              \item 管理员根据系统反馈信息，进行适当修改调整，推出新的时令菜。
            \end{enumerate}

            意外：
            \begin{enumerate}[label=\arabic*.]
              \item 管理员未正确登陆
              \item 管理员输入查询条件不符合，系统给与警告。
              \item 调用数据库失败，未能得到相应菜单数据。
              \item 数据库显示失败，同样未能得到相应菜单数据。
            \end{enumerate}
      \item 方案2
            \begin{enumerate}[label=\arabic*.]
              \item 管理员输入正确用户名与密码，系统经过验证，准许登录。
              \item 管理员点击查看当日菜品被点情况，系统给与数据反馈。
              \item 管理员查看的情况给与如实记录，形成统计表。
            \end{enumerate}

            意外：
            \begin{enumerate}[label=\arabic*.]
              \item 管理员未正确登录
              \item 管理员点击查看链接失败，未能查看到。
              \item 点击后，系统调用数据库失败，管理员未能如愿查看到。
              \item 系统显示失败，管理员查看失败。
            \end{enumerate}
      \item 方案3
            \begin{enumerate}[label=\arabic*.]
              \item 管理员输入正确用户名与密码，系统经过验证，准许登录。
              \item 管理员输入点餐情况查询条件，提交给系统。
              \item 系统根据条件，调用相关数据库，进行查询。
              \item 系统将查询结果返回给管理员
              \item 管理员根据查询结果对菜单进行相关修改：增加新菜色，受欢迎菜色移动到推荐栏中，删除冷门菜品等，并记录。
            \end{enumerate}

            意外：
            \begin{enumerate}[label=\arabic*.]
              \item 管理员未能正确登录
              \item 管理员输入查询条件不符，系统给与警告提示。
              \item 系统调用数据库失败，不能得到相关统计表。
              \item 系统显示失败，管理员不能得到相关统计表，不能进行修改。
            \end{enumerate}
      \item 方案4
            \begin{enumerate}[label=\arabic*.]
              \item 管理员输入正确用户名与密码，系统经过验证，准许登录。
              \item 管理员查看菜单修改记录，系统给出相关数据。
              \item 管理员将菜单修改，记录新的统计表，并列出清单。
            \end{enumerate}

            意外：
            \begin{enumerate}[label=\arabic*.]
              \item 管理员未能正常登录
              \item 系统调用数据库失败，系统不能得到菜品被点情况数据，不能统计。
              \item 系统显示失败，管理员不能查看菜品被点情况，不能统计。
            \end{enumerate}
    \end{enumerate}
  \item 后置条件：菜单被更新
  \item 商业规则：时令菜得根据季节而定，菜品更改也需根据顾客点餐情况或店面规模而定。
  \item 需求：时令菜1次/季，其它菜1次/月。
\end{itemize}

\section{二级用例图}
\begin{figure}[H]
  \centering
  \includegraphics[width=5.466666667in]{pic/use_case_level2.png}
\end{figure}

\section{类图}
\subsection{第一层类图}
\begin{figure}[H]
  \centering
  \includegraphics[width=5.777777778in]{pic/class_diagram.png}
\end{figure}
\subsection{点餐机类图}
\begin{figure}[H]
  \centering
  \includegraphics[width=7.1in]{pic/class_diagram_aofm.png}
\end{figure}
\subsection{用户类图}
\begin{figure}[H]
  \centering
  \includegraphics[width=3.6in]{pic/class_diagram_user.png}
\end{figure}
\subsection{管理员类图}
\begin{figure}[H]
  \centering
  \includegraphics[width=5.344444444in]{pic/class_diagram_admin.png}
\end{figure}
\subsection{数据库类图}
\begin{figure}[H]
  \centering
  \includegraphics[width=6.211111111in]{pic/class_diagram_db.png}
\end{figure}

\section{时序图}
\subsection{统计金额时序图}
\begin{figure}[H]
  \centering
  \includegraphics[width=5.555555556in]{pic/sequence_diagram_moneystatistics.png}
\end{figure}
\subsection{点餐时序图}
\begin{figure}[H]
  \centering
  \includegraphics[width=6.288888889in]{pic/sequence_diagram_orderfood.png}
\end{figure}
\subsection{充值时序图}
\begin{figure}[H]
  \begin{flushleft}
    \includegraphics[width=7.377777778in]{pic/sequence_diagram_charge.png}
  \end{flushleft}
\end{figure}
\subsection{查询余额时序图}
\begin{figure}[H]
  \centering
  \includegraphics[width=6.533333333in]{pic/sequence_diagram_querybalance.png}
\end{figure}
\subsection{管理菜单时序图}
\begin{figure}[H]
  \centering
  \includegraphics[width=6.033333333in]{pic/sequence_diagram_managemenu.png}
\end{figure}

\section{协作图}
\subsection{点餐协作图}
\begin{figure}[H]
  \centering
  \includegraphics[width=4.2in]{pic/collaboration_diagram_orderfood.png}
\end{figure}

\section{状态图}
\subsection{用户状态图}
\begin{figure}[H]
  \centering
  \includegraphics[width=6.933333333in]{pic/state_machine_diagram_user.png}
\end{figure}

\section{活动图}
\subsection{点餐活动图}
\begin{figure}[H]
  \centering
  \includegraphics[width=5.811111111in]{pic/activity_diagram_orderfood.png}
\end{figure}

\end{document}